package uade.distribuidas.cliente.servlet;

import java.io.IOException;

import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.util.Date;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import uade.distribuidas.cliente.util.xmlReader;
import uade.distribuidas.repo.dto.RemitoCPRDTO;
import uade.distribuidas.repo.dto.RemitoODVDTO;
import uade.distribuidas.repo.exception.ExceptionRemito;
import uade.distribuidas.repo.interfaces.ManagerRemitosIf;
import uade.distribuidas.repo.type.ConfirmidadType;
import uade.distribuidas.repo.type.EstadoRemitoType;



public class ControladorRemito extends HttpServlet {

	private static final long serialVersionUID = 1087702007634924546L;
	private static final String ERROR = "/ERROR.jsp";
	private final String JSP_DIR = "jsp/remitos";

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
    	
	    	ManagerRemitosIf ManagerRemitosIf = null;
			try {
				ManagerRemitosIf = (ManagerRemitosIf)Naming.lookup ("//localhost:1099/ManagerRemitosIf");
			} catch (NotBoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
            String action = request.getParameter("action");
            String jspPage = "/index.jsp";

            if ((action == null) || (action.length() < 1))
            {
                action = "default";
            }

            if ("default".equals(action))
            {
                jspPage = "/index.jsp";
            }
            else if ("displaylistCPR".equals(action))
            {
                List<RemitoCPRDTO> remitosCPR;
				try {
					remitosCPR = ManagerRemitosIf.getRemitosCPR(); 
					request.setAttribute("remitosCPR", remitosCPR);
	                jspPage = JSP_DIR+"/MostrarListaCPR.jsp";
				} catch (ExceptionRemito e) {
					request.setAttribute("errorMsg", new ExceptionRemito("No fue posible obtener el listado de remitos CPR"));
					jspPage = ERROR;
					e.printStackTrace();
				}
             
            } else if ("displaylistSinFacturar".equals(action))
            {
                List<RemitoODVDTO> remitosSinFacturar;
				try {
					remitosSinFacturar = ManagerRemitosIf.getRemitosNoFacturados(); 
					request.setAttribute("remitos", remitosSinFacturar);
	                jspPage = JSP_DIR+"/MostrarListaODV.jsp";
				} catch (ExceptionRemito e) {
					request.setAttribute("errorMsg", new ExceptionRemito("No fue posible obtener el listado de remitos a facturar"));
					jspPage = ERROR;
					e.printStackTrace();
				}
             
            }else if ("emitirODV".equals(action))
            {
            	Integer idRemitoCPR = Integer.valueOf(request.getParameter("idRemitoCPR"));
            	
				try {
					RemitoCPRDTO r =(RemitoCPRDTO)ManagerRemitosIf.getRemito(idRemitoCPR);
					RemitoODVDTO ro = new RemitoODVDTO();
					
					ro.setCliente(r.getOrden().getCliente());
					ro.setEmision(new Date());
					ro.setNumero(r.getOrden().getNumero() + "_RODV");
					ro.setOrden(r.getOrden());
					ro.setItems(r.getItems());
					ro.setConformidad(ConfirmidadType.PENDIENTE);
					ro.setEstado(EstadoRemitoType.PEDIENTE);
					ManagerRemitosIf.save(ro);
					xmlReader.saveRemitoODVToXml(ro);
	                jspPage = JSP_DIR+"/MostrarListaODV.jsp";   
				} catch (ExceptionRemito e1) {
					request.setAttribute("errorMsg", new ExceptionRemito("No fue posible persistir los cambios del pedido"));
					jspPage = ERROR;
					e1.printStackTrace();
				}
         
            }

            dispatch(jspPage, request, response);
        }
    
        protected void dispatch(String jsp, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
            if (jsp != null)
            {
                RequestDispatcher rd = request.getRequestDispatcher(jsp);
                rd.forward(request, response);
            }
        }

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
            doPost(request, response);
        }
}
